iT邦幫忙

2022 iThome 鐵人賽

DAY 10
0
Modern Web

Django 初心者之旅系列 第 10

【Day 10】Django Models 番外篇(1) – ORM

  • 分享至 

  • xImage
  •  

昨天我們成功在Python Shell新增Records並把這些Records抓出來顯示在網頁上,仔細觀察取得資料表紀錄的那行程式碼,就會發現我們並不是用SQL去撈資料而是用資料表物件(Model Object)自帶的方法去取得資料。

#昨天的程式碼
from django.http import HttpResponse
from django.template import loader
from .models import Members

def index(request):
  #取得Members資料表上所有的Records
  mymembers = Members.objects.all().values() #取得資料表紀錄
  output = ""
  for x in mymembers:
    output += x["firstname"]
  return HttpResponse(output)

那為什麼不是用SQL而是靠資料表物件(Model Object)去操作資料呢?
因為Django的資料庫操作靠的是ORM這個技術。

ORM


(圖片來源)

ORMObject Relational Mapping的簡寫,中文翻譯是物件關聯對映,主要就是將資料庫的資料與物件(Object)相互對應,再實際一點的說法,就是把Django資料庫裡面的資料表(Model)以物件(Object)的型態召喚出來,接著就可以直接用這個物件做資料的CRUD,而不用寫SQL

ORM 的優點

  1. 對於熟悉物件操作的人來說,非常方便
  2. 不會因為資料庫不同,而有原生SQL語言轉換的困擾
  3. 可以防止SQL Injection的問題
  4. 程式碼相對簡潔,因為不會有複雜的SQL出現

SQL Injection : 資料庫收到惡意使用者所輸入的 SQL 指令,在未驗證的情況下就逕自執行,導致惡意使用者可以取得最高權限,進而對資料庫造成未知破壞,其中包括竊取、修改、刪除資料等等。

ORM 的缺點

  1. ORM相對SQL是一個新的觀念,會需要花時間理解不同方法的意義
  2. 因為是先將資料庫資料對應成物件才開始操作,所以在效能上會有點不好
  3. 需要複雜的SQL才能做到的事,用ORM會很難做到一樣的事,導致最後還是要寫SQL

綜合ORM的優點與缺點,可以發現ORM雖然使用上很簡單,但還是有它的侷限性,所以還是要學點SQL會比較好解決複雜的問題。

今天沒有需要動手做的東西非常輕鬆,而明天依然會是Django Models的番外篇,要來稍微補充說明前面看起來很謎的migratemakemigrations等等。


上一篇
【Day 09】在 Python Shell 新增 Records
下一篇
【Day 11】Django Models 番外篇(2) – Migrations
系列文
Django 初心者之旅31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言